package com.wei.czz.common.dto.admin.menu;

import com.fasterxml.jackson.annotation.*;
import com.wei.czz.common.tool.BaseEntity;
import lombok.*;
import lombok.experimental.Accessors;

import java.util.Date;
import java.util.TreeSet;

/**
 * Created by IntelliJ IDEA.
 *
 * @author wei
 * date: 2021-10-03 13:34:00
 * className: MenuDto 系统菜单与前端交互信息封装类
 * version: 1.0
 * description:
 *  `@JsonInclude(JsonInclude.Include.NON_EMPTY)`：接口返回对象时，如果某个字段值为空，序列化不操作该字段
 */
@Getter
@Setter
@Accessors(chain = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class MenuDto extends BaseEntity implements Comparable<MenuDto> {

    /**
     * 菜单id
     */
    private String menuId;

    /**
     * 父菜单ID，一级菜单的父菜单ID为0
     */
    private String parentId;

    /**
     * 父级菜单路径
     */
    private String menuPath;

    /**
     * 菜单名称
     */
    private String name;

    /**
     * 菜单路径
     */
    private String path;

    /**
     * 权限标识(多个用逗号分隔，如：user:add,user:update)
     */
    private String permit;

    /**
     * 菜单类型[0-目录 1-页面 2-按钮]
     */
    private Integer type;

    /**
     * 菜单类型名称
     */
    private String typeName;

    /**
     * 菜单图标
     */
    private String icon;

    /**
     * 排序等级
     */
    private Integer sort;

    /**
     * 菜单显示状态[0-显示 1-隐藏]
     */
    private Integer display;

    /**
     * 菜单显示状态名称
     */
    private String displayName;

    /**
     * 菜单状态[0-可用 1-不可用]
     */
    private Integer status;

    /**
     * 菜单状态名称
     */
    private String statusName;

    /**
     * 状态[true-禁用 false-可用]
     */
    private Boolean disabled;

    /**
     * 更新时间
     */
    private Date updateTime;

    /**
     * 创建时间
     */
    private Date createTime;

    /**
     * 操作创建的用户
     */
    private String createUser;

    /**
     * 当前菜单对象包含的全部子菜单对象
     */
    private TreeSet<MenuDto> children;

    @Override
    public int compareTo(MenuDto o) {
        int val = sort.compareTo(o.getSort());
        if (val == 0) {
            val = createTime.compareTo(o.getCreateTime());
            if (val == 0) {
                val = menuId.compareTo(o.getMenuId());
            }
        }
        return val;
    }
}
